<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>字符串查询 / 截断 / 拼接 函数速查表</title>
<style>
    body { font-family: Arial, sans-serif; margin: 20px; background: #f9f9f9; }
    h1 { text-align: center; }
    table { border-collapse: collapse; width: 100%; margin-top: 15px; }
    th, td { border: 1px solid #ccc; padding: 8px; text-align: left; vertical-align: top; }
    th { background-color: #444; color: #fff; }
    code { background: #eee; padding: 2px 4px; border-radius: 3px; }
    .search-box { margin: 10px 0; padding: 5px; width: 300px; }
    .kernel { background-color: #d4f4dd; }
    .user { background-color: #dce9ff; }
    .shared { background-color: #fff8d6; }
</style>
<script>
function tableSearch(inputId, tableId) {
    var input = document.getElementById(inputId);
    var filter = input.value.toLowerCase();
    var table = document.getElementById(tableId);
    var trs = table.getElementsByTagName("tr");

    for (var i = 1; i < trs.length; i++) { // skip header
        var cells = trs[i].getElementsByTagName("td");
        var match = false;
        for (var j = 0; j < cells.length; j++) {
            if (cells[j].textContent.toLowerCase().indexOf(filter) > -1) {
                match = true;
                break;
            }
        }
        trs[i].style.display = match ? "" : "none";
    }
}
</script>
</head>
<body>

<h1>字符串查询 / 截断 / 拼接 函数速查表</h1>
<p style="text-align:center;">支持实时搜索，可按函数名、说明、适用范围筛选</p>

<input type="text" id="searchAPI" class="search-box" placeholder="搜索..." onkeyup="tableSearch('searchAPI','apiTable')">

<table id="apiTable">
<tr>
    <th>功能分类</th>
    <th>函数名</th>
    <th>原型</th>
    <th>作用</th>
    <th>返回值</th>
    <th>适用范围</th>
    <th>备注</th>
</tr>

<!-- 查询类 -->
<tr class="shared"><td>查询</td><td>strlen</td>
<td><code>size_t strlen(const char *s);</code></td>
<td>计算字符串长度（不含\0）</td>
<td>长度</td><td>共用</td><td>不检查空指针</td></tr>

<tr class="shared"><td>查询</td><td>strnlen</td>
<td><code>size_t strnlen(const char *s, size_t maxlen);</code></td>
<td>计算长度，限制扫描字符数</td>
<td>长度</td><td>共用</td><td>比strlen安全</td></tr>

<tr class="shared"><td>查询</td><td>strchr</td>
<td><code>char *strchr(const char *s, int c);</code></td>
<td>查找首次出现的字符</td>
<td>指向字符位置或NULL</td><td>共用</td><td>含\0也可查找</td></tr>

<tr class="shared"><td>查询</td><td>strrchr</td>
<td><code>char *strrchr(const char *s, int c);</code></td>
<td>查找最后出现的字符</td>
<td>指向字符位置或NULL</td><td>共用</td><td>常用于扩展名查找</td></tr>

<tr class="shared"><td>查询</td><td>strstr</td>
<td><code>char *strstr(const char *haystack, const char *needle);</code></td>
<td>查找子串首次出现位置</td>
<td>指向子串或NULL</td><td>共用</td><td>大小写敏感</td></tr>

<tr class="kernel"><td>查询</td><td>strnstr</td>
<td><code>char *strnstr(const char *haystack, const char *needle, size_t len);</code></td>
<td>限定长度查找子串</td>
<td>指向子串或NULL</td><td>内核/BSD</td><td>更安全</td></tr>

<tr class="shared"><td>查询</td><td>strpbrk</td>
<td><code>char *strpbrk(const char *s, const char *accept);</code></td>
<td>查找任一字符位置</td>
<td>指针或NULL</td><td>共用</td><td>类似搜索集合</td></tr>

<tr class="shared"><td>查询</td><td>strspn</td>
<td><code>size_t strspn(const char *s, const char *accept);</code></td>
<td>前缀连续匹配集合长度</td>
<td>长度</td><td>共用</td><td>常用于前缀过滤</td></tr>

<tr class="shared"><td>查询</td><td>strcspn</td>
<td><code>size_t strcspn(const char *s, const char *reject);</code></td>
<td>前缀连续不匹配集合长度</td>
<td>长度</td><td>共用</td><td>常用于分隔符查找</td></tr>

<!-- 截断类 -->
<tr class="shared"><td>截断</td><td>strtok</td>
<td><code>char *strtok(char *str, const char *delim);</code></td>
<td>分隔字符串成多个片段</td>
<td>片段指针或NULL</td><td>共用</td><td>破坏原字符串</td></tr>

<tr class="shared"><td>截断</td><td>strtok_r</td>
<td><code>char *strtok_r(char *str, const char *delim, char **saveptr);</code></td>
<td>线程安全分隔</td>
<td>片段指针或NULL</td><td>共用</td><td>推荐替代strtok</td></tr>

<tr class="shared"><td>截断</td><td>strsep</td>
<td><code>char *strsep(char **stringp, const char *delim);</code></td>
<td>分隔字符串，允许空片段</td>
<td>片段指针或NULL</td><td>共用</td><td>常用于内核</td></tr>

<tr class="kernel"><td>截断</td><td>strim</td>
<td><code>char *strim(char *s);</code></td>
<td>移除前后空白符</td>
<td>处理后的字符串</td><td>内核</td><td>内核工具函数</td></tr>

<!-- 拼接类 -->
<tr class="shared"><td>拼接</td><td>strcat</td>
<td><code>char *strcat(char *dest, const char *src);</code></td>
<td>追加src到dest</td>
<td>dest指针</td><td>共用</td><td>不检查溢出</td></tr>

<tr class="shared"><td>拼接</td><td>strncat</td>
<td><code>char *strncat(char *dest, const char *src, size_t n);</code></td>
<td>追加n个字符</td>
<td>dest指针</td><td>共用</td><td>相对安全</td></tr>

<tr class="kernel"><td>拼接</td><td>strlcat</td>
<td><code>size_t strlcat(char *dst, const char *src, size_t size);</code></td>
<td>安全追加，保证\0结尾</td>
<td>源长度+目标长度</td><td>内核/BSD</td><td>推荐</td></tr>
</table>

</body>
</html>